遍历数组
视频锁定
{$ currentTime | date:'mm:ss' $}
{$ timeLeft | date:'mm:ss' $}
在对象与 JSON 这一章中,我们讨论了 for...in 这种遍历对象的方式,这种方式同样适 用于数组,比如:
var array = [1, 2, 3, 4]; for(var item in array){
print(array[item]); }
将会打印:
1
2
3
4
但是这种方式并不总是有效,比如我们扩展了内置对象 Array,如下:
Array.prototype.useless = function(){}
然后重复执行上边的代码,会得到这样的输出:
1
2
3
4
function(){}
设想这样一种情况,如果你对数组的遍历做 sum 操作,那么会得到一个莫名其妙的错误,毕竟函数对象不能做求和操作。幸运的是,我们可以用另一种遍历方式来取得正确的结果:
for(var i = 0, len = array.length; i < len;i++){
print(array[i]);
}
这种 for 循环如其他很多语言中的写法一致,重要的是,它不会访问哪些下标不是数字的元素,如上例中的 function,这个 function 的下标为 useless,是一个字符串。从这个例子我们可以看出,除非必要,尽量不要对全局对象进行扩展,因为对全局对象的扩展会造成所有继承链上都带上“烙印”,而有时候这些烙印会成为滋生 bug 的温床。
在线练习
{$ activeFileHint $}